### Projekt 5 Regenbogen-Ambientebeleuchtung **1. Beschreibung** Arduino 2812RGB LED ist ein programmierbares, farbenfrohes, traumhaftes Licht, dessen Farbe, Helligkeit und Rhythmus einstellbar sind. Diese Regenbogen-Ambientebeleuchtung kann nach Belieben als dynamische Dekoration verwendet werden. Oder Sie können sie steuern, um „mit der Musik zu tanzen“. Wichtig ist, dass sie als Alarm verbessert werden kann. Ihr eingebauter Sensor erkennt die Umgebung und warnt die Benutzer durch Änderung von Farbe, Helligkeit und Rhythmus. **2. Funktionsprinzip** ![](media/A22.png) Das Datenprotokoll verwendet einen Kommunikationsmodus mit einadrigem Return-to-Zero-Code. Nach dem Zurücksetzen des Pixels beim Einschalten empfängt der DIN-Anschluss Daten vom Controller. Die zuerst ankommenden 24-Bit-Daten werden vom ersten Pixel extrahiert und in das interne Datenregister gesendet. Die verbleibenden Daten werden von einer Verstärkerschaltung verstärkt und über den DOUT-Anschluss an das nächste kaskadierte Pixel weitergeleitet. Beim Durchlaufen der Pixel verringert sich das Signal jeweils um 24 Bit. Außerdem verwendet das Pixel eine automatische Formungs- und Weiterleitungstechnologie, sodass die Anzahl der kaskadierten Pixel nur durch die Signalübertragungsgeschwindigkeit begrenzt ist. **3. Schaltplan** ![](media/A23.png) **4. Testcode** ``` /* keyestudio ESP32 Inventor Learning Kit Project 5.1 Rainbow Ambient Light http://www.keyestudio.com */ //Add 2812RGB library file #include #define PIN 15 Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN); //Defines the instance strip and assigns the RGB LED number pins to the library code void setup() { strip.begin(); //Activate RGB LED strip.show(); // Refresh the display } void loop() { strip.setPixelColor(0, strip.Color(255, 0, 0)); //The frist RGB LED is red strip.setPixelColor(1, strip.Color(0, 255, 0)); //The second RGB LED is green strip.setPixelColor(2, strip.Color(0, 0, 255)); //The third RGB LED is blue strip.setPixelColor(3, strip.Color(255, 255, 0)); //The fourth RGB LED is yellow strip.setPixelColor(4, strip.Color(255, 0, 255)); //The fifth RGB LED is purple strip.setPixelColor(5, strip.Color(255, 255, 255)); //The sixth RGB LED is white strip.show(); //Refresh the display delay(100); //Give a delay to save the stability of the display } ``` **5. Testergebnis** Nach dem Hochladen des Codes und Einschalten leuchten die LEDs in verschiedenen Farben. Von links nach rechts: - Die erste RGB-LED ist rot - Die zweite RGB-LED ist grün - Die dritte RGB-LED ist blau - Die vierte RGB-LED ist gelb - Die fünfte RGB-LED ist lila - Die sechste RGB-LED ist weiß ![](media/A24.png) **6. Erweiterter Code** ``` /* keyestudio ESP32 Inventor Learning Kit Project 5.2 Rainbow Ambient Light http://www.keyestudio.com */ //Add 2812RGB library file #include #define PIN 15 Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { // Some example procedures showing how to display to the pixels: colorWipe(strip.Color(255, 0, 0), 50); // Red colorWipe(strip.Color(0, 255, 0), 50); // Green colorWipe(strip.Color(0, 0, 255), 50); // Blue // Send a theater pixel chase in... theaterChase(strip.Color(127, 127, 127), 50); // White theaterChase(strip.Color(127, 0, 0), 50); // Red theaterChase(strip.Color( 0, 0, 127), 50); // Blue rainbow(20); rainbowCycle(20); theaterChaseRainbow(50); } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i